React DevToolsμ μ μ¬λ ₯μ μ΅λν νμ©νμΈμ. useDebugValue ν μ μ¬μ©νμ¬ μ»€μ€ν ν μ λν μ¬μ©μ μ μ λ μ΄λΈμ νμνκ³ λλ²κΉ μ κ°μννλ λ°©λ²μ λ°°μ보μΈμ.
React useDebugValue: DevToolsμμ 컀μ€ν ν λλ²κΉ κ²½ν ν₯μνκΈ°
νλ React κ°λ°μμ 컀μ€ν
ν
μ μ¬μ¬μ© κ°λ₯ν λ‘μ§μ ν΅μ¬μ
λλ€. 볡μ‘ν μν κ΄λ¦¬, μ¬μ΄λ μ΄ννΈ, 컨ν
μ€νΈ μνΈμμ©μ κΉλνκ³ μ‘°ν© κ°λ₯ν ν¨μλ‘ μΆμνν μ μκ² ν΄μ€λλ€. μ΄λ¬ν μΆμνλ νμ₯ κ°λ₯ν μ ν리μΌμ΄μ
μ ꡬμΆνλ λ° κ°λ ₯νμ§λ§, λλ‘λ λλ²κΉ
μ€μ λͺ¨νΈν¨μ μ λ°ν μ μμ΅λλ€. React DevToolsμμ 컀μ€ν
ν
μ μ¬μ©νλ μ»΄ν¬λνΈλ₯Ό κ²μ¬νλ©΄, μ’
μ’
useStateλ useEffectμ κ°μ μΌλ°μ μΈ κΈ°λ³Έ ν
λͺ©λ‘λ§ λ³΄μΌ λΏ, ν΄λΉ 컀μ€ν
ν
μ΄ μ€μ λ‘ λ¬΄μμ νλμ§μ λν 컨ν
μ€νΈλ κ±°μ μμ΅λλ€. λ°λ‘ μ΄λ useDebugValueκ° μ μ©νκ² μ¬μ©λ©λλ€.
useDebugValueλ μ΄λ¬ν κ°κ·Ήμ λ©μ°κΈ° μν΄ μ€κ³λ νΉλ³ν React ν
μ
λλ€. κ°λ°μκ° React DevTools κ²μ¬κΈ°μμ μ§μ λ³Ό μ μλ, μ¬λμ΄ μ½κΈ° μ¬μ΄ 컀μ€ν
λ μ΄λΈμ 컀μ€ν
ν
μ μ 곡ν μ μκ² ν΄μ€λλ€. μ΄κ²μ κ°λ°μ κ²½νμ κ°μ νκ³ λλ²κΉ
μΈμ
μ λ λΉ λ₯΄κ³ μ§κ΄μ μΌλ‘ λ§λλ κ°λ¨νλ©΄μλ λ§€μ° ν¨κ³Όμ μΈ λꡬμ
λλ€. μ΄ μ’
ν© κ°μ΄λμμλ useDebugValueμ κΈ°λ³Έ ꡬνλΆν° κ³ κΈ μ±λ₯ κ³ λ €μ¬ν λ° μ€μ©μ μΈ μ€μ μ¬μ© μ¬λ‘κΉμ§ λͺ¨λ κ²μ νμν κ²μ
λλ€.
`useDebugValue`λ μ νν 무μμΈκ°?
ν΅μ¬μ μΌλ‘, useDebugValueλ React DevTools λ΄μμ 컀μ€ν
ν
μ μ€λͺ
μ μΈ λ μ΄λΈμ μΆκ°ν μ μκ² ν΄μ£Όλ ν
μ
λλ€. μ΄λ μ ν리μΌμ΄μ
μ λ‘μ§μ΄λ νλ‘λμ
λΉλμλ μλ¬΄λ° μν₯μ λ―ΈμΉμ§ μμΌλ©°, μμνκ² κ°λ° μμλ§ μ¬μ©λλ λꡬμ
λλ€. μ μΌν λͺ©μ μ 컀μ€ν
ν
μ λ΄λΆ μνλ νν©μ λν ν΅μ°°λ ₯μ μ 곡νμ¬ DevToolsμ 'Hooks' νΈλ¦¬λ₯Ό ν¨μ¬ λ μ μ΅νκ² λ§λλ κ²μ
λλ€.
μΌλ°μ μΈ μμ
νλ¦μ μκ°ν΄ λ΄
μλ€: μ¬μ©μμ μΈμ¦ μνλ₯Ό κ΄λ¦¬νλ useUserSessionμ΄λΌλ 컀μ€ν
ν
μ λ§λ€μλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. μ΄ ν
μ λ΄λΆμ μΌλ‘ useStateλ₯Ό μ¬μ©νμ¬ μ¬μ©μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ useEffectλ₯Ό μ¬μ©νμ¬ ν ν° κ°±μ μ μ²λ¦¬ν μ μμ΅λλ€. μ΄ ν
μ μ¬μ©νλ μ»΄ν¬λνΈλ₯Ό κ²μ¬νλ©΄ DevToolsμλ useStateμ useEffectκ° νμλ κ²μ
λλ€. νμ§λ§ μ΄λ€ μνκ° μ΄λ€ ν
μ μνλ κ±ΈκΉμ? νμ¬ μνλ 무μμΌκΉμ? μ¬μ©μκ° λ‘κ·ΈμΈνλμ? μ½μμ κ°μ μλμΌλ‘ λ‘κΉ
νμ§ μκ³ μλ μ¦μ κ°μμ±μ ν보ν μ μμ΅λλ€. useDebugValueλ "λ‘κ·ΈμΈ μ¬μ©μ: Jane Doe" λλ "μΈμ
: λ§λ£λ¨"κ³Ό κ°μ λ μ΄λΈμ DevTools UIμ useUserSession ν
μ μ§μ 첨λΆν μ μκ² νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
μ£Όμ νΉμ§:
- 컀μ€ν
ν
μμλ§ μ¬μ© κ°λ₯:
useDebugValueλ 컀μ€ν ν (μ΄λ¦μ΄ 'use'λ‘ μμνλ ν¨μ) λ΄μμλ§ νΈμΆν μ μμ΅λλ€. μΌλ° μ»΄ν¬λνΈ λ΄μμ νΈμΆνλ©΄ μ€λ₯κ° λ°μν©λλ€. - DevTools μ°λ: μ 곡λ κ°μ React DevTools λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μΌλ‘ μ»΄ν¬λνΈλ₯Ό κ²μ¬ν λλ§ λ³΄μ λλ€. λ€λ₯Έ μΆλ ₯μ μμ΅λλ€.
- κ°λ° μ μ©: Reactμ λ€λ₯Έ κ°λ° μ€μ¬ κΈ°λ₯κ³Ό λ§μ°¬κ°μ§λ‘,
useDebugValueμ μ½λλ νλ‘λμ λΉλμμ μλμΌλ‘ μ κ±°λμ΄ μ€μ μ ν리μΌμ΄μ μ μ±λ₯ μν₯μ μ ν μ£Όμ§ μμ΅λλ€.
λ¬Έμ μ : 컀μ€ν ν μ 'λΈλλ°μ€'
useDebugValueμ κ°μΉλ₯Ό μ λλ‘ μ΄ν΄νκΈ° μν΄, μ΄ ν
μ΄ ν΄κ²°νλ λ¬Έμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€. μ¬μ©μμ λΈλΌμ°μ μ¨λΌμΈ μνλ₯Ό μΆμ νλ 컀μ€ν
ν
μ΄ μλ€κ³ μμν΄ λ³΄μΈμ. μ€νλΌμΈ μλ리μ€λ₯Ό μννκ² μ²λ¦¬ν΄μΌ νλ νλ μΉ μ ν리μΌμ΄μ
μμ νν μ¬μ©λλ μ νΈλ¦¬ν°μ
λλ€.
`useDebugValue`κ° μλ 컀μ€ν ν
λ€μμ useOnlineStatus ν
μ κ°λ¨ν ꡬνμ
λλ€:
import { useState, useEffect } from 'react';
function useOnlineStatus() {
const [isOnline, setIsOnline] = useState(navigator.onLine);
useEffect(() => {
const handleOnline = () => setIsOnline(true);
const handleOffline = () => setIsOnline(false);
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
}, []);
return isOnline;
}
μ΄μ μ΄ ν μ μ»΄ν¬λνΈμμ μ¬μ©ν΄ λ΄ μλ€:
function StatusBar() {
const isOnline = useOnlineStatus();
return <h2>{isOnline ? 'β
Online' : 'β Disconnected'}</h2>;
}
React DevToolsμμ StatusBar μ»΄ν¬λνΈλ₯Ό κ²μ¬νλ©΄ 'Hooks' ν¨λμ λ€μκ³Ό κ°μ΄ νμλ©λλ€:
- OnlineStatus:
- State: true
- Effect: () => {}
μ΄κ²μ κΈ°λ₯μ μΌλ‘λ λ¬Έμ μμ§λ§ μ΄μμ μ΄μ§λ μμ΅λλ€. 'State'λΌλ μΌλ°μ μΈ μ΄λ¦κ³Ό λΆλ¦¬μΈ κ°μ΄ 보μ λλ€. μ΄ κ°λ¨ν κ²½μ°μλ 'true'κ° 'μ¨λΌμΈ'μ μλ―Ένλ€κ³ μΆλ‘ ν μ μμ΅λλ€. νμ§λ§ ν μ΄ 'μ°κ²° μ€', 'μ¬νμΈ μ€' λλ 'λΆμμ 'κ³Ό κ°μ λ 볡μ‘ν μνλ₯Ό κ΄λ¦¬νλ€λ©΄ μ΄λ¨κΉμ? νΉμ μ»΄ν¬λνΈκ° κ°κ° μ체 λΆλ¦¬μΈ μνλ₯Ό κ°μ§ μ¬λ¬ 컀μ€ν ν μ μ¬μ©νλ€λ©΄μ? μ΄λ€ 'State: true'κ° μ΄λ€ λ‘μ§μ ν΄λΉνλμ§ μΆμΈ‘νλ κ²μμ΄ λ κ²μ λλ€. 컀μ€ν ν μ μ½λμμ κ°λ ₯νκ² λ§λλ μΆμνκ° DevToolsμμλ λΆν¬λͺ νκ² λ§λλλ€.
ν΄κ²°μ± : λͺ νμ±μ μν `useDebugValue` ꡬν
useOnlineStatus ν
μ 리ν©ν λ§νμ¬ useDebugValueλ₯Ό ν¬ν¨μμΌ λ΄
μλ€. λ³κ²½μ λ―Έλ―Ένμ§λ§ κ·Έ μν₯μ μλΉν©λλ€.
import { useState, useEffect, useDebugValue } from 'react';
function useOnlineStatus() {
const [isOnline, setIsOnline] = useState(navigator.onLine);
// μ΄ μ€μ μΆκ°νμΈμ!
useDebugValue(isOnline ? 'Online' : 'Offline');
useEffect(() => {
// ... effect λ‘μ§μ λμΌνκ² μ μ§λ©λλ€ ...
}, []);
return isOnline;
}
μ΄ ν μ€μ μΆκ°νλ©΄, React DevToolsμμ StatusBar μ»΄ν¬λνΈλ₯Ό λ€μ κ²μ¬ν΄ λ΄
μλ€. 'Hooks' ν¨λμ΄ μ΄μ νμ°ν λ€λ₯΄κ² λ³΄μΌ κ²μ
λλ€:
- OnlineStatus: "Online"
- State: true
- Effect: () => {}
μ¦μ, λͺ ννκ³ μ¬λμ΄ μ½κΈ° μ¬μ΄ λ μ΄λΈμΈ "Online"μ΄ λ³΄μ λλ€. λ€νΈμν¬ μ°κ²°μ λμΌλ©΄ μ΄ λ μ΄λΈμ μλμΌλ‘ "Offline"μΌλ‘ μ λ°μ΄νΈλ©λλ€. μ΄κ²μ λͺ¨λ λͺ¨νΈν¨μ μ κ±°ν©λλ€. λ μ΄μ μμ μν κ°μ ν΄μν νμ μμ΄, ν μ΄ νμ¬ μνλ₯Ό μ νν μλ €μ€λλ€. μ΄λ¬ν μ¦κ°μ μΈ νΌλλ°± 루νλ λλ²κΉ μ κ°μννκ³ , νΉν 컀μ€ν ν μ λ΄λΆ μλμ μ΅μνμ§ μμ κ°λ°μμκ² μ»΄ν¬λνΈ λμμ ν¨μ¬ μ½κ² μ΄ν΄νλλ‘ λ§λλλ€.
κ³ κΈ μ¬μ©λ² λ° μ±λ₯ μ΅μ ν
useDebugValueμ κΈ°λ³Έ μ¬μ©λ²μ κ°λ¨νμ§λ§, μ€μν μ±λ₯ κ³ λ €μ¬νμ΄ μμ΅λλ€. useDebugValueμ μ λ¬νλ ννμμ ν
μ μ¬μ©νλ μ»΄ν¬λνΈκ° λ λλ§λ λλ§λ€ μ€νλ©λλ€. isOnline ? 'Online' : 'Offline'μ κ°μ κ°λ¨ν μΌν μ°μ°μ κ²½μ° μ±λ₯ λΉμ©μ 무μν μ μμ΅λλ€.
νμ§λ§ λ 볡μ‘νκ³ κ³μ° λΉμ©μ΄ λ§μ΄ λλ κ°μ νμν΄μΌ νλ€λ©΄ μ΄λ¨κΉμ? μλ₯Ό λ€μ΄, ν° λ°μ΄ν° λ°°μ΄μ κ΄λ¦¬νλ ν μ΄ μκ³ , λλ²κΉ μ μν΄ ν΄λΉ λ°μ΄ν°μ μμ½μ νμνκ³ μΆλ€κ³ μμν΄ λ³΄μΈμ.
function useLargeData(data) {
// ... λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ λ‘μ§
// μ μ¬μ μ±λ₯ λ¬Έμ : μ΄ μ½λλ λ λλ§λ λλ§λ€ μ€νλ©λλ€!
useDebugValue(`Data contains ${data.length} items. First item: ${JSON.stringify(data[0])}`);
return data;
}
μ΄ μλ리μ€μμλ, κ±°μ λ³΄μ§ μλ λλ²κ·Έ λ μ΄λΈμ μν΄ λ λλ§λ λλ§λ€ JSON.stringifyλ‘ μ μ¬μ μΌλ‘ ν° κ°μ²΄λ₯Ό μ§λ ¬ννλ κ²μ κ°λ° μ€μ λμ λλ μ±λ₯ μ νλ₯Ό μ λ°ν μ μμ΅λλ€. λ¨μν λλ²κΉ
λꡬμ μ€λ²ν€λ λλ¬Έμ μ ν리μΌμ΄μ
μ΄ λλ¦¬κ² λκ»΄μ§ μ μμ΅λλ€.
ν΄κ²°μ± : μ§μ°λ ν¬λ§€ν° ν¨μ
Reactλ λ°λ‘ μ΄ λ¬Έμ λ₯Ό μν ν΄κ²°μ±
μ μ 곡ν©λλ€. useDebugValueλ μ νμ μΈ λ λ²μ§Έ μΈμλ‘ ν¬λ§€ν
ν¨μλ₯Ό λ°μ΅λλ€. μ΄ λ λ²μ§Έ μΈμλ₯Ό μ 곡νλ©΄, ν΄λΉ ν¨μλ DevToolsκ° μ΄λ € μκ³ νΉμ μ»΄ν¬λνΈκ° κ²μ¬λ λλ§ νΈμΆλ©λλ€. μ΄κ²μ λΉμ©μ΄ λ§μ΄ λλ κ³μ°μ μ§μ°μμΌ λ§€ λ λλ§λ§λ€ μ€νλλ κ²μ λ°©μ§ν©λλ€.
ꡬ문μ λ€μκ³Ό κ°μ΅λλ€: useDebugValue(value, formatFn)
useLargeData ν
μ 리ν©ν λ§νμ¬ μ΄ μ΅μ νλ μ κ·Ό λ°©μμ μ¬μ©ν΄ λ΄
μλ€:
function useLargeData(data) {
// ... λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ λ‘μ§
// μ΅μ νλ¨: ν¬λ§€ν
ν¨μλ DevToolsμμ κ²μ¬λ λλ§ μ€νλ©λλ€.
useDebugValue(data, dataArray => `Data contains ${dataArray.length} items. First item: ${JSON.stringify(dataArray[0])}`);
return data;
}
μ΄μ λ€μκ³Ό κ°μ΄ λμν©λλ€:
- λ§€ λ λλ§ μ Reactλ
useDebugValueνΈμΆμ νμΈν©λλ€. 첫 λ²μ§Έ μΈμλ‘ μμ `data` λ°°μ΄μ λ°μ΅λλ€. - λ λ²μ§Έ μΈμ(ν¬λ§€ν ν¨μ)λ₯Ό μ¦μ μ€ννμ§ μμ΅λλ€.
- κ°λ°μκ° React DevToolsλ₯Ό μ΄κ³ `useLargeData`λ₯Ό μ¬μ©νλ μ»΄ν¬λνΈλ₯Ό ν΄λ¦ν λλ§ Reactλ ν¬λ§€ν ν¨μλ₯Ό νΈμΆνμ¬ `data` λ°°μ΄μ μ λ¬ν©λλ€.
- κ·Έλ¬λ©΄ ν¬λ§€ν λ λ¬Έμμ΄μ΄ DevTools UIμ νμλ©λλ€.
μ΄ ν¨ν΄μ λ§€μ° μ€μν λͺ¨λ² μ¬λ‘μ λλ€. νμνλ €λ κ°μ κ³μ°, λ³ν λλ ν¬λ§€ν μ΄ νμν κ²½μ°, μ±λ₯ μ νλ₯Ό νΌνκΈ° μν΄ νμ μ§μ°λ ν¬λ§€ν ν¨μλ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
μ€μ©μ μΈ μ¬μ© μ¬λ‘ λ° μμ
useDebugValueκ° μλͺ
μ μμΈμ΄ λ μ μλ λͺ κ°μ§ μ€μ μλ리μ€λ₯Ό λ μ΄ν΄λ³΄κ² μ΅λλ€.
μ¬μ© μ¬λ‘ 1: λΉλκΈ° λ°μ΄ν° νμΉ ν
μΌλ°μ μΈ μ»€μ€ν ν μ€ νλλ λ‘λ©, μ±κ³΅, μ€λ₯ μνλ₯Ό ν¬ν¨ν λ°μ΄ν° νμΉμ μ²λ¦¬νλ κ²μ λλ€.
function useFetch(url) {
const [status, setStatus] = useState('idle');
const [data, setData] = useState(null);
useDebugValue(`Status: ${status}`);
useEffect(() => {
if (!url) return;
setStatus('loading');
fetch(url)
.then(response => response.json())
.then(json => {
setData(json);
setStatus('success');
})
.catch(error => {
console.error(error);
setStatus('error');
});
}, [url]);
return { status, data };
}
μ΄ ν
μ μ¬μ©νλ μ»΄ν¬λνΈλ₯Ό κ²μ¬ν λ, DevToolsλ `Fetch: "Status: loading"`, κ·Έ λ€μ `Fetch: "Status: success"` λλ `Fetch: "Status: error"`λ₯Ό λͺ
ννκ² λ³΄μ¬μ€ κ²μ
λλ€. μ΄λ console.log λ¬Έμ μΆκ°ν νμ μμ΄ μμ² μλͺ
μ£ΌκΈ°λ₯Ό μ¦κ°μ μ΄κ³ μ€μκ°μΌλ‘ 보μ¬μ€λλ€.
μ¬μ© μ¬λ‘ 2: νΌ μ λ ₯ μν κ΄λ¦¬
νΌ μ λ ₯μ κ΄λ¦¬νλ ν μ κ²½μ°, νμ¬ κ°κ³Ό μ ν¨μ± κ²μ¬ μνλ₯Ό νμνλ κ²μ΄ λ§€μ° μ μ©ν μ μμ΅λλ€.
function useFormInput(initialValue) {
const [value, setValue] = useState(initialValue);
const [error, setError] = useState(null);
const handleChange = (e) => {
setValue(e.target.value);
if (e.target.value.length < 5) {
setError('Value must be at least 5 characters');
} else {
setError(null);
}
};
useDebugValue(value, val => `Value: "${val}" ${error ? `(Error: ${error})` : '(Valid)'}`);
return { value, onChange: handleChange, error };
}
μ¬κΈ°μλ μ§μ°λ ν¬λ§€ν°λ₯Ό μ¬μ©νμ¬ μ¬λ¬ μν κ°μ νλμ νλΆν λλ²κ·Έ λ μ΄λΈλ‘ κ²°ν©νμ΅λλ€. DevToolsμμλ `FormInput: "Value: \"hello\" (Error: Value must be at least 5 characters)"`μ κ°μ΄ νμλ μ μμΌλ©°, μ΄λ μ λ ₯ μνμ μ 체 κ·Έλ¦Όμ νλμ μ 곡ν©λλ€.
μ¬μ© μ¬λ‘ 3: 볡μ‘ν μν κ°μ²΄ μμ½
λ§μ½ ν μ΄ μ¬μ©μ λ°μ΄ν°μ κ°μ 볡μ‘ν κ°μ²΄λ₯Ό κ΄λ¦¬νλ€λ©΄, DevToolsμ μ 체 κ°μ²΄λ₯Ό νμνλ κ²μ λ²μ‘ν μ μμ΅λλ€. λμ κ°κ²°ν μμ½μ μ 곡νμΈμ.
function useUserSession() {
const [user, setUser] = useState({ id: '123', name: 'Jane Doe', role: 'Admin', preferences: { theme: 'dark', notifications: true } });
useDebugValue(user, u => u ? `Logged in as ${u.name} (Role: ${u.role})` : 'Logged Out');
return user;
}
DevToolsκ° κΉκ² μ€μ²©λ μ¬μ©μ κ°μ²΄λ₯Ό νμνλ €κ³ μλνλ λμ , ν¨μ¬ λ μννκΈ° μ¬μ΄ λ¬Έμμ΄μΈ `UserSession: "Logged in as Jane Doe (Role: Admin)"`λ₯Ό 보μ¬μ€ κ²μ λλ€. μ΄λ λλ²κΉ μ κ°μ₯ κ΄λ ¨μ± λμ μ 보λ₯Ό κ°μ‘°ν©λλ€.
`useDebugValue` μ¬μ©μ μν λͺ¨λ² μ¬λ‘
μ΄ ν μ μ΅λν νμ©νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μΈμ:
- μ§μ°λ ν¬λ§€ν μ νΈ: κ²½νμ, λλ²κ·Έ κ°μ κ³μ°, μ°κ²° λλ λ³νμ΄ νμν κ²½μ° νμ λ λ²μ§Έ μΈμ(ν¬λ§€ν° ν¨μ)λ₯Ό μ¬μ©νμΈμ. μ΄λ κ² νλ©΄ κ°λ° μ€ λ°μν μ μλ μ μ¬μ μ±λ₯ λ¬Έμ λ₯Ό λ°©μ§ν μ μμ΅λλ€.
- λ μ΄λΈμ κ°κ²°νκ³ μλ―Έμκ² μ μ§: λͺ©νλ νλμ λ³Ό μ μλ λΉ λ₯Έ μμ½μ μ 곡νλ κ²μ λλ€. μ§λμΉκ² κΈΈκ±°λ 볡μ‘ν λ μ΄λΈμ νΌνμΈμ. ν μ νμ¬ λμμ μ μνλ κ°μ₯ μ€μν μνμ μ§μ€νμΈμ.
- 곡μ λΌμ΄λΈλ¬λ¦¬μ μ΄μμ : 곡μ μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ μ€ν μμ€ νλ‘μ νΈμ μΌλΆκ° λ 컀μ€ν
ν
μ μμ±νλ κ²½μ°,
useDebugValueλ₯Ό μ¬μ©νλ κ²μ μλΉμλ€μ κ°λ°μ κ²½νμ ν₯μμν€λ νλ₯ν λ°©λ²μ λλ€. κ·Έλ€μ΄ ν μ μμ€ μ½λλ₯Ό μ½μ§ μμλ ν΅μ°°λ ₯μ μ 곡ν©λλ€. - κ³Όλνκ² μ¬μ©νμ§ μκΈ°: λͺ¨λ 컀μ€ν
ν
μ λλ²κ·Έ κ°μ΄ νμν κ²μ μλλλ€. λ¨μΌ
useStateλ₯Ό κ°μΈλ λ§€μ° κ°λ¨ν ν μ κ²½μ° μ€λ³΅λ μ μμ΅λλ€. λ΄λΆ λ‘μ§μ΄ 볡μ‘νκ±°λ μνκ° μμ κ°μμ μ¦μ λͺ ννμ§ μμ κ²½μ°μ μ¬μ©νμΈμ. - μ’μ μ΄λ¦κ³Ό κ²°ν©νκΈ°: μ λͺ λͺ λ 컀μ€ν ν (μ: `useOnlineStatus`)κ³Ό λͺ νν λλ²κ·Έ κ°μ κ²°ν©νλ κ²μ΄ κ°λ°μ κ²½νμ νμ€μ λλ€.
`useDebugValue`λ₯Ό μ¬μ©νμ§ *λ§μμΌ* ν λ
μ΄μ λ§νΌμ΄λ νκ³λ₯Ό μ΄ν΄νλ κ²λ μ€μν©λλ€:
- μΌλ° μ»΄ν¬λνΈ λ΄λΆ: λ°νμ μ€λ₯λ₯Ό μ λ°ν©λλ€.
useDebugValueλ 컀μ€ν ν μ μ©μ λλ€. ν΄λμ€ μ»΄ν¬λνΈμ κ²½μ° `displayName` μμ±μ μ¬μ©ν μ μκ³ , ν¨μ μ»΄ν¬λνΈμ κ²½μ° λͺ νν ν¨μ μ΄λ¦μΌλ‘ μΆ©λΆν κ²½μ°κ° λ§μ΅λλ€. - νλ‘λμ
λ‘μ§μ©: μ΄κ²μ κ°λ° μ μ© λꡬμμ κΈ°μ΅νμΈμ. μ ν리μΌμ΄μ
λμμ μ€μν λ‘μ§μ
useDebugValueλ΄λΆμ λμ§ λ§μΈμ. νλ‘λμ λΉλμλ μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ λλ€. νλ‘λμ μΈμ¬μ΄νΈλ₯Ό μν΄μλ μ ν리μΌμ΄μ μ±λ₯ λͺ¨λν°λ§(APM)μ΄λ λ‘κΉ μλΉμ€ κ°μ λꡬλ₯Ό μ¬μ©νμΈμ. - 볡μ‘ν λλ²κΉ
μ μν `console.log` λ체μ¬λ‘μ: μν λ μ΄λΈμλ νλ₯νμ§λ§,
useDebugValueλ μνΈμμ© κ°λ₯ν κ°μ²΄λ₯Ό νμνκ±°λ μ€λ¨μ λλ `console.log` λ¬Έμ²λΌ λ¨κ³λ³ λλ²κΉ μ μ¬μ©ν μ μμ΅λλ€. μ΄ λꡬλ€μ λ체νλ κ²μ΄ μλλΌ λ³΄μν©λλ€.
κ²°λ‘
Reactμ useDebugValueλ μμ§λ§ κ°λ ₯ν ν
APIμ μΆκ° κΈ°λ₯μ
λλ€. 컀μ€ν
ν
μ λ΄λΆ μλμ λͺ
ννκ² λ³΄μ¬μ£Όλ μ°½μ μ 곡ν¨μΌλ‘μ¨ μΆμνλ λ‘μ§μ λλ²κΉ
νλ μ΄λ €μμ μ§μ μ μΌλ‘ ν΄κ²°ν©λλ€. React DevToolsμ μΌλ°μ μΈ ν
λͺ©λ‘μ μ€λͺ
μ μ΄κ³ λ§₯λ½μ μΈ νμλ‘ λ³νν¨μΌλ‘μ¨ μΈμ§ λΆνλ₯Ό ν¬κ² μ€μ΄κ³ , λλ²κΉ
μλλ₯Ό λμ΄λ©°, μ λ°μ μΈ κ°λ°μ κ²½νμ ν₯μμν΅λλ€.
κ·Έ λͺ©μ μ μ΄ν΄νκ³ , μ±λ₯ μ΅μ νλ μ§μ° ν¬λ§€ν°λ₯Ό μ±ννλ©°, 볡μ‘ν 컀μ€ν
ν
μ μ μ€νκ² μ μ©ν¨μΌλ‘μ¨ React μ ν리μΌμ΄μ
μ λ ν¬λͺ
νκ³ μ μ§λ³΄μνκΈ° μ½κ² λ§λ€ μ μμ΅λλ€. λ€μμ μ¬μνμ§ μμ μνλ λ‘μ§μ κ°μ§ 컀μ€ν
ν
μ λ§λ€ λλ, μ μ μκ°μ λ΄μ΄ useDebugValueλ₯Ό μΆκ°ν΄ 보μΈμ. μ΄λ μ½λ λͺ
νμ±μ λν μμ ν¬μκ° λμ΄, ν₯ν κ°λ° λ° λλ²κΉ
μΈμ
μμ λΉμ κ³Ό λΉμ μ νμκ² μλΉν μ΄μ΅μ κ°μ Έλ€ μ€ κ²μ
λλ€.